// console.log(Object.getOwnPropertyDescriptors(Promise.prototype));

const p1 = new Promise((res, rej) => {
    res('调用then')
})
// 同一个promise对象可以调用多次then方法。类似订阅者模式，都会被回调
p1.then(res => {
    console.log(111, res);
})
p1.then(res => {
    console.log(222, res);
})
setTimeout(() => {
    p1.then(res => {
        console.log('定时器 ' + res);
    })
}, 1000);


// 因为 Promise.prototype.then 和 Promise.prototype.catch 方法返回的是 promise，所以它们可以被链式调用。
p1.then(res => {
    // 1.返回的是一个普通值，会被promise的resolve方法包裹
    // 2.没有返回值在下一个then中为undefined
    // return '333'

    // 3.返回一个promise,状态有返回值决定
    // return new Promise((res, rej) => {
    //     setTimeout(() => {
    //         res(444)
    //         // rej(444)
    //     }, 1000)
    // })

    // 4. 如果返回值是一个实现了then方法的对象,那么本状态移交给then方法决定
    return {
        then: (res, rej) => {
            // res('555')
            rej('555')
        }
    }
}).then(res => {
    console.log('res' + res);
}).catch(err => {
    console.log('err' + err);
    return 666
}).then(res => {
    console.log('res2' + res);
})
